<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // 判断数据类型的方法
    // 数据类型  简单数据类型number string boolean null undefined symbol  复杂数据类型 数组，对象，函数 Object
    // console.log(typeof(1));//number
    // console.log(typeof('11111'))//string
    // console.log(typeof(null))//object  这是历史遗留的一个bug
    // console.log(typeof(false))//boolean
    // console.log(typeof(undefined))//undefined
    // console.log(typeof Symbol())//Symbol
    // console.log(typeof BigInt)//function
    // console.log(typeof function fn(){}) //function
    // console.log(typeof [11,22])//object
    // console.log(typeof {})//object
    // bigInt 是一种新的数据类型   Number数字类型    2^53
    // 总结:typeof 可以准确判断简单数据类型 但是null，BigInt除外，typeof判断复杂数据类型 返回的是object  （函数 返回的是function）

    // instanceof 
//    console.log(1 instanceof Number);
//    console.log("1111" instanceof String);
//    console.log(true instanceof Boolean);
// //    console.log(null instanceof null);
//    console.log(undefined instanceof undefined);

// instanceof  语法  后面跟的都是构造函数
// console.log([] instanceof Array);
// console.log({} instanceof Object);
// console.log(function fn(){} instanceof Function);
// console.log(/^[1-5]$/ instanceof RegExp);
// console.log(new Date() instanceof Object);

// instanceof 不能准备判断简单数据类型  返回的是false  null undefined 报错 可以判断出复杂数据类型的具体类型 返回值是true
// instanceof 可以判断 正则  日期对象



// constructor
let num = 1
let str = '111'
let flag = false
let n = null
let  u = undefined
let arr =[]
let obj = {}
// console.log(num.constructor == Number);
// console.log(str.constructor == String);
// console.log(flag.constructor == Boolean);
// console.log(arr.constructor == Array);
// console.log(obj.constructor == Object);
// console.log(n.constructor == null);
// console.log(u.constructor == undefined);

// 总结  undefined null 不能使用constructor来检测  报错


// Object.prototype.toString.call()   万能的检测数据类型的方法

console.log(Object.prototype.toString.call(num)); //[object Number]
console.log(Object.prototype.toString.call(str))
console.log(Object.prototype.toString.call(flag))
console.log(Object.prototype.toString.call(n))
console.log(Object.prototype.toString.call(u))
console.log(Object.prototype.toString.call(arr))
console.log(Object.prototype.toString.call(obj))
console.log(Object.prototype.toString.call(/^[a-z]$/))
console.log(Object.prototype.toString.call(new Date()))
console.log(Object.prototype.toString.call(function fn(){})) 

// 总结  Object.prototype.toString.call() 可以检查所有的数据类型  （简单的 ，复杂的  ，正则，日期对象）












</script>
</html>